home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 8 / Amoszine 8 (Disk 2 of 3).adf / Powerbobs.lha / powerbobsv1.0 / demos / KillEm.asc < prev    next >
Text File  |  1995-06-30  |  5KB  |  202 lines

  1. '  Title: Kill'Em
  2. ' Author: PAUL OVERY 
  3. '
  4. 'Bank 14 = Gun shots 
  5. 'Bank 15 = Men animation Frames  
  6. '
  7. '-- Used by false mouse driver     
  8. Global DX,DY,OX,OY,RIGHT_CLICK,LEFT_CLICK,_X,_Y
  9. '
  10. '-- Used by game     
  11. Global MAN1$,MAN2$,SHOT$,DIE$,MEN
  12. '
  13. '------------------------------------- 
  14. Load "PowerBobsV1.0:DEMOS/KillEm.Abk"
  15. '------------------------------------- 
  16. '
  17. Proc _INTIALISE
  18. Proc _SETUP_AMAL
  19. '
  20. Break Off 
  21. NUL=Execall(-132) : Rem -- Multitasking off    
  22. '
  23. Repeat 
  24.    '
  25.    Proc _MOUSE : Rem -- Need to update mouse, now that multitasking is off.   
  26.    '
  27.    If LEFT_CLICK
  28.       '
  29.       Shoot 
  30.       '
  31.       Amal 10,SHOT$ : Amal On 10 : Rem    -- Animate blast  
  32. Amreg(10,0)=_X
  33. Amreg(10,1)=_Y
  34.       '
  35.       '-- Has a man has been hit?  
  36.       '
  37.       If Pspritebob Fastcol(1,1 To MEN)
  38.          '
  39.          C0L=Pfast Sprbobcol(-1) : Rem      -- Find out which man has been hit.     
  40.          If I Pbob(C0L)<65 : Rem         -- Can't hit man while falling.      
  41.             Amal C0L-1,DIE$
  42.             Amal On C0L-1 : Rem          -- Animate death sequence.  
  43.          End If 
  44.       End If 
  45.    End If 
  46.    '
  47.    For K=0 To MEN-1
  48.       ' -- Once a man has died, the value 666 is fed to the main program.    
  49.       If Amreg(K,0)=666
  50.          ' -- Animate a new man after a death.    
  51.          If Rnd(1)=0
  52.             Amal K,MAN1$ : Rem -- Walk left 
  53.          Else 
  54.             Amal K,MAN2$ : Rem -- Walk left & down
  55.          End If 
  56.          Amal On K : Rem -- Restart a new man moving. 
  57.       End If 
  58.    Next K
  59.    '
  60.    ' -- Update all screen objects.  
  61.    '
  62.    Psprite 0,_X,_Y,11 : Rem           -- Draw Gun Sight  
  63.    Psync Pbob 1 To MEN : Rem          -- Pass Amal movements into Pbob  
  64.    Psync Psprite 1 To 1 : Rem         -- Pass Amal movements into Psprite  
  65.    Psprite Update : Pbob Update : Rem -- Draw sprites & bobs   
  66.    '
  67.    Screen Swap : Wait Vbl : Rem       -- Flip new movements into view
  68.    '
  69. Until RIGHT_CLICK
  70. '
  71. NUL=Execall(-138) : Rem -- Multitasking on.  
  72. Break On 
  73. '
  74. Procedure _INTIALISE
  75.    '
  76.    Hide 
  77.    Input "Number of men? [1..10] --> ";MEN
  78.    N=1
  79.    '
  80.    ' Do not pre-store your bobs & sprites in bank 1.    
  81.    ' Its much better to cut them from a crunched picture bank.
  82.    '
  83.    ' i.e. 
  84.    '  
  85.    ' -- First cut out sprites 
  86.    '
  87.    Unpack 14 To 0 : Rem -- show gun sight/shot gfx.
  88.    Screen Hide 0
  89.    For X=0 To 176 Step 16
  90.       Get Sprite N,X,0 To X+16,16
  91.       Inc N
  92.    Next X
  93.    '
  94.    '-- Convert sprite bank into new faster format.
  95.    '
  96.    Set Psprite Colours 4
  97.    Convert Sprites 1
  98.    Psprite Max 8
  99.    Erase 1
  100.    '
  101.    '-- Now cut out all the men. 
  102.    '
  103.    N=1
  104.    Unpack 15 To 0 : Rem -- show men gfx
  105.    Screen Hide 0
  106.    For Y=0 To 308 Step 32
  107.       For X=0 To 288 Step 32
  108.          Get Bob N,X,Y To X+32,Y+32 : Inc N
  109.       Next X
  110.    Next Y
  111.    '
  112.    '-- Define what type of Pbob's you need.   
  113.    '
  114.    Make Mask 
  115.    Reserve Pbobs MEN
  116.    Pbob Dbuf True
  117.    For K=1 To MEN
  118.       Pbob Height K,32
  119.    Next K
  120.    '
  121.    '
  122.    Screen Open 0,320,256,16,Lowres : Screen Hide 0
  123.    Curs Off : Flash Off 
  124.    '-- Draw bubble message. 
  125.    '
  126.    Cls 6 : Pen 5 : Paper 6 : Print "Get'Em"
  127.    For Y=0 To 7
  128.       For X=0 To 50
  129.          If Point(X,Y)<>6
  130.             Circle X*6+20,Y*6+100,Rnd(2)+2
  131.          End If 
  132.       Next X
  133.    Next Y
  134.    Get Sprite Palette 
  135.    Pen 1 : Centre "Right to stop"
  136.    Sprite Update Off : Bob Update Off : Autoback 0 : Double Buffer 
  137.    Screen Show 0
  138.    '
  139.    '-- Give sprites new colours, ie "RGB" 
  140.    '
  141.    For K=17 To 27 Step 4
  142.       Colour K,$300 : Colour K+1,$A00 : Colour K+2,$F00
  143.    Next K
  144.    '
  145. End Proc
  146. Procedure _SETUP_AMAL
  147.    '
  148.    '-- Define all Amal programs 
  149.    '
  150.    MAN2$="A 0,"
  151.    For K=1 To 32 : MAN2$=MAN2$+"("+Str$(K)+",2)" : Next K
  152.    MAN2$=MAN2$+"B: L X=Z(200)+132;L Y=-32;M -368,192,368;J B"
  153.    '
  154.    MAN1$="A 0,"
  155.    For K=33 To 64 : MAN1$=MAN1$+"("+Str$(K)+",2)" : Next K
  156.    MAN1$=MAN1$+"B: L X=336;L Y=Z(180)+32;M -368,0,368;J B"
  157.    '
  158.    DIE$="A 1,"
  159.    For K=65 To 96 : DIE$=DIE$+"("+Str$(K)+",2)" : Next K
  160.    DIE$=DIE$+"F R0=0 T 30;P;N R0;"
  161.    DIE$=DIE$+"F R0=0 T 6;L A=96;P;P;L A=97;P;P;N R0; L R0=666"
  162.    '
  163.    SHOT$="L X=R0; L Y=R1;A 1,"
  164.    For K=1 To 10 : SHOT$=SHOT$+"("+Str$(K)+",1)" : Next K
  165.    SHOT$=SHOT$+";P;P;P;P;P;P;P;P;P;P;L Y=0;L X=0"
  166.    '
  167.    '-- set up all Amal programs 
  168.    '
  169.    For K=1 To MEN
  170.       Amal K-1,MAN1$
  171.       Pchannel To Pbob K-1 To K
  172.    Next K
  173.    '
  174.    Amal 10,SHOT$ : Pchannel To Psprite 10 To 1
  175.    '
  176.    '-- Run all Amal programs
  177.    '
  178.    Amal On 
  179.    '
  180.    '-- Animate at full frame rate (50fps) 
  181.    '
  182.    Psync Every Pbob 1 : Psync Every Psprite 1
  183.    '
  184. End Proc
  185. Procedure _MOUSE
  186.    '
  187.    '-- This updates "X mouse", "Y mouse" when multitaking is off. 
  188.    '
  189.    Y_BYTE=Peek($DFF00A) : Rem like "x mouse" but only values 0-255   
  190.    X_BYTE=Peek($DFF00B) : Rem like "y mouse" but only values 0-255 
  191.    LEFT_CLICK= Not Btst(6,$BFE001)
  192.    RIGHT_CLICK= Not Btst(10,$DFF016)
  193.    DX=X_BYTE-OX : DY=Y_BYTE-OY : OX=X_BYTE : OY=Y_BYTE
  194.    If DX<-127 Then DX=256+DX
  195.    If DX>127 Then DX=DX-256
  196.    If DY<-127 Then DY=256+DY
  197.    If DY>127 Then DY=DY-256
  198.    _Y=Max(Min(_Y+DY,Y Hard(Screen Height-8)),40)
  199.    _X=Max(Min(_X+DX,X Hard(Screen Width-8)),120)
  200.    '
  201. End Proc
  202.